/* 
 * File:   Nivel.h
 * Author: 75.02 - Grupo 7, 2do cuatrimestre 2012.
 *
 * Created on 31 de octubre de 2012, 18:47
 */

#ifndef NIVEL_H
#define	NIVEL_H

#include "Escenario.h"
#include "Historia.h"
#include "ISerializable.h"

using namespace TP::Serializacion;
using namespace TP::Juego;
using namespace TP::Juego::Arena;

namespace TP { namespace Juego {

class Nivel : public ISerializable {
public:

    Nivel();
    
    Nivel(unsigned id, unsigned anchura, unsigned altura, unsigned tiempo, const std::string &rutaImagenFondo);

    ~Nivel();

    /* Id es el orden del nivel en el mundo (1, 2, 3, etc).
     * OJO: el id no coincide con la posicion del nivel en el vector
     * de niveles que guarda el mundo. Ademas, los niveles se numeran
     * a partir de 1, no de 0 */
    unsigned getId() const;

    unsigned getTiempo() const;

    /* No retorna una copia, por lo tanto no hacerle delete al puntero
     * retornado */
    Escenario* getEscenario();

    /* No hacer asignaciones de niveles ni copias */

    /* No se debe comparar niveles de distintos mundos */
    bool operator==(const Nivel &nivel);

    bool operator!=(const Nivel &nivel);
    
    virtual string aXML();
    
    virtual string aXML(const string& pPath);
    
    virtual void parseXML (const string& pDescriptor);
    
    virtual TiXmlElement* aElementoXML ();
    
    virtual void deElementoXML (TiXmlElement* pElemento);    

private:
    unsigned _id
           , _tiempo;
    Escenario* _escenario;
};

}}

#endif	/* NIVEL_H */

